//
//  CommUtls.h
//  Function
//  常用工具类
//  Created by liuyongchao on 16/11/8.
//  Copyright © 2016年 liuyongchao. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

#import  <dlfcn.h>
#include <netdb.h>
#include <net/if.h>
#include <ifaddrs.h>
#include <net/if_dl.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#import  <CommonCrypto/CommonCryptor.h>
#import  <SystemConfiguration/SystemConfiguration.h>
#include <sys/xattr.h>
#import <QuartzCore/QuartzCore.h>
#import <sys/utsname.h>

@interface CommUtls : NSObject


#pragma mark --时间处理
/**
 时间戳转换 -默认格式 yyyy-MM-dd

 @param time 当前时间 -毫秒数

 @return 字符串类型时间
 */
+(NSString*)timeToTranslate:(NSNumber *)time;


/**
 根据时间格式转换

 @param time         当前时间 -毫秒数
 @param formatterStr 时间格式

 @return 字符串类型时间
 */
+(NSString*)timeToTranslate:(NSNumber *)time Formatter:(NSString*)formatterStr;


/**
 根据小时获取当天时间点

 @param hour <#hour description#>
 @return <#return value description#>
 */
+(NSString*)getPointTimeWithHour:(NSString*)hour;

/**
 获取当前时区时间

 @param anyDate 当前时间

 @return 返回时间对象
 */
+(NSDate *)getNowDateFromatAnDate:(NSDate *)anyDate;

/**
 *	@brief	格式化时间为字符串
 *
 *	@param 	date 	NSDate系统时间类型
 *
 *	@return	返回默认格式yyyy-MM-dd HH:mm:ss
 */+ (NSString *)encodeTime:(NSDate *)date;

/**
 *	@brief	字符串格式化为时间格式
 *
 *	@param 	dateString 	默认格式yyyy-MM-dd HH:mm:ss
 *
 *	@return	返回时间格式
 */
+ (NSDate *)dencodeTime:(NSString *)dateString;

/**
 *	@brief	把秒转化为时间字符串显示，播放器常用
 *
 *	@param 	durartion 	传入参数
 *
 *	@return	播放器播放进度时间，比如
 */
+ (NSString *)changeSecondsToString:(NSInteger)durartion;


/**
 距离现在多久 --标识

 @param beTime 到现在的时间
 @return 字符串
 */
+ (NSString *)distanceTimeWithBeforeTime:(double)beTime;



/**
 获取当前0点时间

 @return 返回时间戳
 */
+ (NSDate *)zeroOfDate:(NSDate *)date;


/**
 返回最近几天的数组

 @param day 天数
 @return 时间戳数组
 */
+(NSArray *)latelyTimeOfDay:(NSInteger)day;


/**
 根据时间戳 返回星期几

 @param date 时间戳
 @return <#return value description#>
 */
+ (NSString *)weekWithDate:(NSNumber *)date;

#pragma mark --文件处理

/**
 *	@brief	判断文件路径是否存在
 *
 *	@param 	fullPathName 	文件完整路径
 *
 *	@return	返回是否存在
 */
+ (BOOL)fileExists:(NSString *)fullPathName;

/**
 *	@brief	删除文件
 *
 *	@param 	fullPathName 	文件完整路径
 *
 *	@return	是否删除成功
 */
+ (BOOL)remove:(NSString *)fullPathName;

/**
 *	@brief	创建文件夹
 *
 *	@param 	dir 	文件夹名字
 */
+ (void)makeDirs:(NSString *)dir;

/**
 *	@brief	判断Document文件路径是否存在
 *
 *	@param 	fileName 	文件名
 *
 *	@return	返回是否存在文件路径
 */
+ (BOOL)fileExistInDocumentPath:(NSString*)fileName;

/**
 *	@brief	通过文件名，获取Document完整路径，如果不存在返回为nil
 *
 *	@param 	fileName 	文件名
 *
 *	@return	返回完整路径
 */
+ (NSString*)documentPath:(NSString*)fileName;

/**
 *	@brief	删除Document文件
 *
 *	@param 	fileName 	文件名
 *
 *	@return	是否成功删除
 */
+ (BOOL)deleteDocumentFile:(NSString*)fileName;

/**
 *	@brief	判断Cache是否存在
 *
 *	@param 	fileName 	文件名
 *
 *	@return	是否存在文件
 */
+ (BOOL)fileExistInCachesPath:(NSString*)fileName;

/**
 *	@brief	通过文件名返回完整的Caches目录下的路径，如果不存在该路径返回nil
 *
 *	@param 	fileName 	文件名
 *
 *	@return	返回Caches完整路径
 */
+ (NSString*)cachesFilePath:(NSString*)fileName;

/**
 *	@brief	删除Caches文件
 *
 *	@param 	fileName 	文件名
 *
 *	@return	删除是否成功
 */
+ (BOOL)deleteCachesFile:(NSString*)fileName;

#pragma mark --其他处理
/**
 *	@brief	通过字节获取文件大小
 *
 *	@param 	number 	字节数
 *
 *	@return	返回大小
 */
+ (NSString*)getSize:(NSNumber*)number;

/**
 *	@brief	获取随即数
 *
 *	@param 	min 	最小数值
 *	@param 	max 	最大数值
 *
 *	@return	返回数值
 */
+ (NSInteger)getRandomNumber:(NSInteger)min maxNumber:(NSInteger)max;

/**
 *	@brief	获取颜色
 *
 *	@param 	stringToConvert 	取色数值
 *
 *	@return	返回颜色
 */
+ (UIColor *)colorWithHexString:(NSString *)stringToConvert;


/**
 *	@brief	mac地址
 *
 *	@return	返回地址
 */
+ (NSString *)getMacAddress;

/**
 *	@brief	检查是否可用网络
 *
 *	@return	返回是否可用
 */
+ (BOOL)checkConnectNet;


/**
 获取随机色

 @return 返回颜色对象
 */
+ (UIColor *)getRandomColor;

/**
 *  随机生成UUID
 *
 *  @return 生成的UUID
 */
+ (NSString *)getUUIDString;


/**
 根据颜色获取图片对象

 @param color 需要转换的颜色

 @return 返回图片对象
 */
+(UIImage*)getImageWithColor:(UIColor*) color;


/**
 返回当前iPhone类型

 @return 类型字符串
 */
+(NSString *)getDeviceBounds;


/**
 根据参数计算字符串长度

 @param text 字符串
 @param maxSize 最大大小
 @param font 字体
 @return 大小
 */
+(CGSize)calculateHeightWithText:(NSString *)text MaxSize:(CGSize)maxSize Font:(UIFont *)font;


///**
// 根据字符串验证手机号
//
// @param text 手机号
// @return 验证结果
// */
//+(BOOL)cheakMobileWithText:(NSString *)text;


#pragma mark --GCD

/**
 *  @brief  异步执行代码块
 *
 *  @param block 代码块
 */
+ (void)gcd_performAsynchronous:(void(^)(void))block;
/**
 *  @brief  GCD主线程执行代码块
 *
 *  @param block 代码块
 *  @param wait  是否同步请求
 */
+ (void)gcd_performOnMainThread:(void(^)(void))block wait:(BOOL)wait;

/**
 *  @brief  延迟执行代码块
 *
 *  @param seconds 延迟时间 秒
 *  @param block   代码块
 */
+ (void)gcd_performAfter:(NSTimeInterval)seconds block:(void(^)(void))block;


#pragma mark --图片处理

/**
 将图片对象转换成base64
 */
+ (NSString *) base64WithImage: (UIImage *) image;

/**
 获取启动页图片
 */
+(UIImage *)getLauchImage;

/**
 检查是否符合金额格式
 */
+(BOOL)checkIsAmountWithTextField:(UITextField *)textField Range:(NSRange)range replacementString:(NSString *)string;

/**
 金额规范化
 */
+(NSString *)amountFormatting:(NSString *)text;


/**
 获取二维码
 @param string 二维码字符串
 @param Imagesize 二维码大小 正方形
 @param waterImagesize 中间插图大小
 @return 二维码
 */
+ (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)Imagesize logoImageSize:(CGFloat)waterImagesize;


/**
 根据总数和每份的个数分成几份

 @param total 总个数
 @param each 每份几个
 @return 多少份
 */
+ (NSInteger)getNumberWithTotal:(NSInteger)total Each:(NSInteger)each;


/**
 判断对象是否为空
 */
+(BOOL)checkIsNull:(id)object;

+ (NSString *)getIpAddresses;


/**
 此方法是用来判断一个字符串是不是整型.如果传进的字符串是一个字符,可以用来判断它是不是数字
 */
+ (BOOL)isPureInt:(NSString *)string;

/*
 view 是要设置渐变字体的控件   bgVIew是view的父视图  colors是渐变的组成颜色  startPoint是渐变开始点 endPoint结束点
 */
+(void)TextGradientview:(UIView *)view bgVIew:(UIView *)bgVIew gradientColors:(NSArray *)colors gradientStartPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint;
/*
 control 是要设置渐变字体的控件   bgVIew是view的父视图  colors是渐变的组成颜色  startPoint是渐变开始点 endPoint结束点
 */
+(void)TextGradientControl:(UIControl *)control bgVIew:(UIView *)bgVIew gradientColors:(NSArray *)colors gradientStartPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint;

/**
 为金额分位数
 
 @param text 金额
 @return 字符串
 */
+ (NSString *)positiveFormat:(NSNumber *)text;

//将view截屏返回 image
+(UIImage*)imageFromView:(UIView*)view;

/**
 完全复制一份view

 @param view 要复制的view
 @return view
 */
+ (UIView *)copyAView:(UIView *)view;


/**
 获取本机机型
 */
+ (NSString*)deviceModelName;


/**
 获取富文本效果
 @param before 富文本前字符串
 @param after 富文本后字符串
 @param attributed 富文本字符串
 @param parameter 返回富文本
 */
+(NSMutableAttributedString *)attributedBeforeText:(NSString *)before AfterText:(NSString *)after AttributedText:(NSString *)attributed Parameter:(NSDictionary *)parameter;


/**
 获取图片后缀
 @param image 图片
 */
+(NSString *)getTypeWithImage:(NSData *)image;

@end
